/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ita.escolaita.ejb;

import br.ita.escolaita.model.entity.Funcionario;
import br.ita.escolaita.model.entity.Professor;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import static br.ita.escolaita.util.EscolaItaUtil.isBlankOrNull;

/**
 *
 * @author rafaelbrizola
 */
@Stateful
public class FuncionarioEjbBean implements FuncionarioEjbLocal {

    @PersistenceContext(unitName="escolaIta-ejbPU")
    private EntityManager em;

    public void salvar(Funcionario funcionario) {
        em.persist(funcionario);
        em.flush();
    }

    public List<Funcionario> listarTodos() {
        Query findAllQuery = em.createNamedQuery("funcionario.findAll");
        List<Funcionario> funcionarios = findAllQuery.getResultList();
        return funcionarios;        
    }

    public List<Professor> listarTodosProfessores() {
        Query findAllQuery = em.createNamedQuery("professor.findAll");
        List<Professor> professores = findAllQuery.getResultList();
        return professores;
    }

    public List<Funcionario> listar(Funcionario f){
        StringBuilder sql = new StringBuilder();
        StringBuilder where = new StringBuilder();
        sql.append("SELECT f FROM Funcionario f ");
        if (!isBlankOrNull(f.getNome())){
            where.append("WHERE UPPER(f.nome) LIKE UPPER('%").append(f.getNome()).append("%') ");
        }
        if (f.getSexo() != null){
            if (where.length() != 0){
                where.append("AND ");
            } else {
                where.append("WHERE ");
            }
            where.append("f.sexo = '").append(f.getSexo()).append("' ");
        }
        if (f.getDataNascimento() != null){
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            if (where.length() != 0){
                where.append("AND ");
            } else {
                where.append("WHERE ");
            }
            where.append("f.dataNascimento = '").append(sdf.format(f.getDataNascimento())).append("' ");
        }
        if (!isBlankOrNull(f.getCpf())){
            if (where.length() != 0){
                where.append("AND ");
            } else {
                where.append("WHERE ");
            }
            where.append("f.cpf = '").append(f.getCpf()).append("' ");
        }
        if (f.getSalario() != 0.0){
            if (where.length() != 0){
                where.append("AND ");
            } else {
                where.append("WHERE ");
            }
            where.append("f.salario = ").append(f.getSalario()).append(" ");
        }
        if (!isBlankOrNull(f.getFoneResidencial())){
            if (where.length() != 0){
                where.append("AND ");
            } else {
                where.append("WHERE ");
            }
            where.append("f.foneResidencial = '").append(f.getFoneResidencial()).append("' ");
        }
        if (!isBlankOrNull(f.getFoneCelular())){
            if (where.length() != 0){
                where.append("AND ");
            } else {
                where.append("WHERE ");
            }
            where.append("f.foneCelular = '").append(f.getFoneCelular()).append("' ");
        }
        if (!isBlankOrNull(f.getCargo())){
            if (where.length() != 0){
                where.append("AND ");
            } else {
                where.append("WHERE ");
            }
            where.append("f.cargo = '").append(f.getCargo()).append("' ");
        }
        Query findAllQuery = em.createQuery(sql.append(where).toString());        
        List<Funcionario> funcionarios = findAllQuery.getResultList();
        return funcionarios;
    }    

    public void alterar(Funcionario funcionario) {
        try {            
            em.merge(funcionario);
            em.flush();
        } catch (Exception e) {
            System.out.println("Erro " + e);
        }
    }
}
